package com.cnaaa.pay.dao;

import com.cnaaa.pay.entity.Trade;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 2018/10/26 Create by 郭文梁
 * TradeDao
 * 订单持久类
 *
 * @author 郭文梁
 * @date 2018/10/26
 */
@Repository
public interface TradeDao extends StringIdDao<Trade> {
    /**
     * 通过Id 或 TradeNo查找订单
     *
     * @param id      ID
     * @param tradeNo TradeNo
     * @return 订单
     */
    Trade findByIdOrTradeNo(String id, String tradeNo);

    /**
     * 通过订单号查找订单
     *
     * @param outTradeNo 订单号
     * @return 订单
     */
    Trade findByTradeNo(String outTradeNo);

    /**
     * 查询所有超时的订单
     *
     * @param timeout 超时分钟
     * @return 订单
     */
    @Query(value = "SELECT * FROM FreeHost.freehost_trade AS t WHERE datediff(MI, t.create_time, getdate()) > ?1 AND t.status = 1 AND t.pay_by = 'alipay'", nativeQuery = true)
    List<Trade> timeoutTrades(long timeout);

    /**
     * 通过用户ID查找加以记录
     *
     * @param userId 用户ID
     * @param offset 偏移
     * @param size   数量
     * @return 交易记录
     */
    @Query(value = "SELECT * FROM FreeHost.freehost_trade AS t WHERE t.user_id=?1 ORDER BY t.create_time OFFSET ?2 ROWS FETCH NEXT ?3 ROWS only", nativeQuery = true)
    List<Trade> listByUserId(long userId, int offset, int size);

    /**
     * 查找某用户的交易数量
     *
     * @param userId 用户ID
     * @return 交易数量
     */
    int countAllByUserId(long userId);
}
